@@ -1,7 +1,7 @@ |
||
1 | 1 |
module EmailConcern |
2 | 2 |
extend ActiveSupport::Concern |
3 | 3 |
|
4 |
- MAIN_KEYS = %w[title message text main value].map(&:to_sym) |
|
4 |
+ MAIN_KEYS = %w[title message text main value] |
|
5 | 5 |
|
6 | 6 |
included do |
7 | 7 |
self.validate :validate_email_options |
@@ -1,14 +1,14 @@ |
||
1 |
-require 'serialize_and_symbolize' |
|
1 |
+require 'serialize_and_normalize' |
|
2 | 2 |
require 'assignable_types' |
3 | 3 |
require 'markdown_class_attributes' |
4 | 4 |
require 'utils' |
5 | 5 |
|
6 | 6 |
class Agent < ActiveRecord::Base |
7 |
- include SerializeAndSymbolize |
|
7 |
+ include SerializeAndNormalize |
|
8 | 8 |
include AssignableTypes |
9 | 9 |
include MarkdownClassAttributes |
10 | 10 |
|
11 |
- serialize_and_symbolize :options, :memory |
|
11 |
+ serialize_and_normalize :options, :memory |
|
12 | 12 |
markdown_class_attributes :description, :event_description |
13 | 13 |
|
14 | 14 |
load_types_in "Agents" |
@@ -44,7 +44,7 @@ module Agents |
||
44 | 44 |
end |
45 | 45 |
|
46 | 46 |
def validate_options |
47 |
- unless %w[start_date end_date from to username password expected_update_period_in_days].all? { |field| options[field.to_sym].present? } |
|
47 |
+ unless %w[start_date end_date from to username password expected_update_period_in_days].all? { |field| options[field].present? } |
|
48 | 48 |
errors.add(:base, "All fields are required") |
49 | 49 |
end |
50 | 50 |
end |
@@ -214,12 +214,12 @@ module Agents |
||
214 | 214 |
end |
215 | 215 |
|
216 | 216 |
event = create_event :payload => payload |
217 |
- log "Event emitted with answer(s)", :outbound_event => event, :inbound_event => Event.find_by_id(memory[:hits][hit_id.to_sym]) |
|
217 |
+ log "Event emitted with answer(s)", :outbound_event => event, :inbound_event => Event.find_by_id(memory[:hits][hit_id]) |
|
218 | 218 |
|
219 | 219 |
assignments.each(&:approve!) |
220 | 220 |
hit.dispose! |
221 | 221 |
|
222 |
- memory[:hits].delete(hit_id.to_sym) |
|
222 |
+ memory[:hits].delete(hit_id) |
|
223 | 223 |
end |
224 | 224 |
end |
225 | 225 |
end |
@@ -268,34 +268,34 @@ module Agents |
||
268 | 268 |
@questions.each.with_index do |question, index| |
269 | 269 |
Question do |
270 | 270 |
QuestionIdentifier do |
271 |
- text question[:key] || "question_#{index}" |
|
271 |
+ text question['key'] || "question_#{index}" |
|
272 | 272 |
end |
273 | 273 |
DisplayName do |
274 |
- text question[:name] || "Question ##{index}" |
|
274 |
+ text question['name'] || "Question ##{index}" |
|
275 | 275 |
end |
276 | 276 |
IsRequired do |
277 |
- text question[:required] || 'true' |
|
277 |
+ text question['required'] || 'true' |
|
278 | 278 |
end |
279 | 279 |
QuestionContent do |
280 | 280 |
Text do |
281 |
- text question[:question] |
|
281 |
+ text question['question'] |
|
282 | 282 |
end |
283 | 283 |
end |
284 | 284 |
AnswerSpecification do |
285 |
- if question[:type] == "selection" |
|
285 |
+ if question['type'] == "selection" |
|
286 | 286 |
|
287 | 287 |
SelectionAnswer do |
288 | 288 |
StyleSuggestion do |
289 | 289 |
text 'radiobutton' |
290 | 290 |
end |
291 | 291 |
Selections do |
292 |
- question[:selections].each do |selection| |
|
292 |
+ question['selections'].each do |selection| |
|
293 | 293 |
Selection do |
294 | 294 |
SelectionIdentifier do |
295 |
- text selection[:key] |
|
295 |
+ text selection['key'] |
|
296 | 296 |
end |
297 | 297 |
Text do |
298 |
- text selection[:text] |
|
298 |
+ text selection['text'] |
|
299 | 299 |
end |
300 | 300 |
end |
301 | 301 |
end |
@@ -305,18 +305,18 @@ module Agents |
||
305 | 305 |
else |
306 | 306 |
|
307 | 307 |
FreeTextAnswer do |
308 |
- if question[:min_length].present? || question[:max_length].present? |
|
308 |
+ if question['min_length'].present? || question['max_length'].present? |
|
309 | 309 |
Constraints do |
310 | 310 |
lengths = {} |
311 |
- lengths[:minLength] = question[:min_length].to_s if question[:min_length].present? |
|
312 |
- lengths[:maxLength] = question[:max_length].to_s if question[:max_length].present? |
|
311 |
+ lengths['minLength'] = question['min_length'].to_s if question['min_length'].present? |
|
312 |
+ lengths['maxLength'] = question['max_length'].to_s if question['max_length'].present? |
|
313 | 313 |
Length lengths |
314 | 314 |
end |
315 | 315 |
end |
316 | 316 |
|
317 | 317 |
if question[:default].present? |
318 | 318 |
DefaultText do |
319 |
- text question[:default] |
|
319 |
+ text question['default'] |
|
320 | 320 |
end |
321 | 321 |
end |
322 | 322 |
end |
@@ -114,7 +114,7 @@ module Agents |
||
114 | 114 |
end |
115 | 115 |
|
116 | 116 |
def group_for(event) |
117 |
- ((options[:group_by_path].present? && Utils.value_at(event.payload, options[:group_by_path])) || 'no_group').to_sym |
|
117 |
+ ((options[:group_by_path].present? && Utils.value_at(event.payload, options[:group_by_path])) || 'no_group') |
|
118 | 118 |
end |
119 | 119 |
|
120 | 120 |
def remember(group, event) |
@@ -79,9 +79,9 @@ module Agents |
||
79 | 79 |
end |
80 | 80 |
|
81 | 81 |
def receive_webhook(params) |
82 |
- if memory[:pending_calls].has_key? params[:secret].to_sym |
|
83 |
- response = Twilio::TwiML::Response.new {|r| r.Say memory[:pending_calls][params[:secret].to_sym], :voice => 'woman'} |
|
84 |
- memory[:pending_calls].delete params[:secret].to_sym |
|
82 |
+ if memory[:pending_calls].has_key? params[:secret] |
|
83 |
+ response = Twilio::TwiML::Response.new {|r| r.Say memory[:pending_calls][params[:secret]], :voice => 'woman'} |
|
84 |
+ memory[:pending_calls].delete params[:secret] |
|
85 | 85 |
[response.text, 200] |
86 | 86 |
end |
87 | 87 |
end |
@@ -85,12 +85,12 @@ module Agents |
||
85 | 85 |
# Avoid memory pollution by reloading the Agent. |
86 | 86 |
agent = Agent.find(id) |
87 | 87 |
agent.memory[:filter_counts] ||= {} |
88 |
- agent.memory[:filter_counts][filter.to_sym] ||= 0 |
|
89 |
- agent.memory[:filter_counts][filter.to_sym] += 1 |
|
88 |
+ agent.memory[:filter_counts][filter] ||= 0 |
|
89 |
+ agent.memory[:filter_counts][filter] += 1 |
|
90 | 90 |
remove_unused_keys!(agent, :filter_counts) |
91 | 91 |
agent.save! |
92 | 92 |
else |
93 |
- create_event :payload => status.merge(:filter => filter.to_s) |
|
93 |
+ create_event :payload => status.merge(:filter => filter) |
|
94 | 94 |
end |
95 | 95 |
end |
96 | 96 |
end |
@@ -98,7 +98,7 @@ module Agents |
||
98 | 98 |
def check |
99 | 99 |
if options[:generate] == "counts" && memory[:filter_counts] && memory[:filter_counts].length > 0 |
100 | 100 |
memory[:filter_counts].each do |filter, count| |
101 |
- create_event :payload => { :filter => filter.to_s, :count => count, :time => Time.now.to_i } |
|
101 |
+ create_event :payload => { :filter => filter, :count => count, :time => Time.now.to_i } |
|
102 | 102 |
end |
103 | 103 |
end |
104 | 104 |
memory[:filter_counts] = {} |
@@ -120,7 +120,7 @@ module Agents |
||
120 | 120 |
|
121 | 121 |
def remove_unused_keys!(agent, base) |
122 | 122 |
if agent.memory[base] |
123 |
- (agent.memory[base].keys - agent.options[:filters].map {|f| f.is_a?(Array) ? f.first.to_sym : f.to_sym }).each do |removed_key| |
|
123 |
+ (agent.memory[base].keys - agent.options[:filters].map {|f| f.is_a?(Array) ? f.first.to_s : f.to_s }).each do |removed_key| |
|
124 | 124 |
agent.memory[base].delete(removed_key) |
125 | 125 |
end |
126 | 126 |
end |
@@ -1,23 +1,21 @@ |
||
1 |
+require 'serialize_and_normalize' |
|
2 |
+ |
|
1 | 3 |
class Event < ActiveRecord::Base |
4 |
+ include SerializeAndNormalize |
|
5 |
+ |
|
2 | 6 |
attr_accessible :lat, :lng, :payload, :user_id, :user, :expires_at |
3 | 7 |
|
4 | 8 |
acts_as_mappable |
5 | 9 |
|
6 |
- serialize :payload |
|
10 |
+ serialize_and_normalize :payload |
|
7 | 11 |
|
8 | 12 |
belongs_to :user |
9 | 13 |
belongs_to :agent, :counter_cache => true |
10 | 14 |
|
11 |
- before_save :symbolize_payload |
|
12 |
- |
|
13 | 15 |
scope :recent, lambda { |timespan = 12.hours.ago| |
14 | 16 |
where("events.created_at > ?", timespan) |
15 | 17 |
} |
16 | 18 |
|
17 |
- def symbolize_payload |
|
18 |
- self.payload = payload.recursively_symbolize_keys if payload.is_a?(Hash) |
|
19 |
- end |
|
20 |
- |
|
21 | 19 |
def reemit! |
22 | 20 |
agent.create_event :payload => payload, :lat => lat, :lng => lng |
23 | 21 |
end |
@@ -1,7 +0,0 @@ |
||
1 |
-require 'utils' |
|
2 |
- |
|
3 |
-class Hash |
|
4 |
- def recursively_symbolize_keys |
|
5 |
- Utils.recursively_symbolize_keys self |
|
6 |
- end |
|
7 |
-end |
@@ -0,0 +1,46 @@ |
||
1 |
+module SerializeAndNormalize |
|
2 |
+ extend ActiveSupport::Concern |
|
3 |
+ |
|
4 |
+ module ClassMethods |
|
5 |
+ def serialize_and_normalize(*column_names) |
|
6 |
+ column_names.flatten.uniq.compact.map(&:to_sym).each do |column_name| |
|
7 |
+ setup_name = "setup_#{column_name}".to_sym |
|
8 |
+ normalize_name = "normalize_#{column_name}".to_sym |
|
9 |
+ validate_name = "validate_#{column_name}".to_sym |
|
10 |
+ |
|
11 |
+ serialize column_name |
|
12 |
+ after_initialize setup_name |
|
13 |
+ before_validation normalize_name |
|
14 |
+ before_save normalize_name |
|
15 |
+ validate validate_name |
|
16 |
+ |
|
17 |
+ class_eval <<-RUBY |
|
18 |
+ def #{setup_name} |
|
19 |
+ self[:#{column_name}] ||= ActiveSupport::HashWithIndifferentAccess.new |
|
20 |
+ end |
|
21 |
+ |
|
22 |
+ def #{validate_name} |
|
23 |
+ # Implement me in your subclass. |
|
24 |
+ end |
|
25 |
+ |
|
26 |
+ def #{normalize_name} |
|
27 |
+ self.#{column_name} = self[:#{column_name}] |
|
28 |
+ end |
|
29 |
+ |
|
30 |
+ def #{column_name}=(data) |
|
31 |
+ data = (JSON.parse(data) rescue data) if data.is_a?(String) |
|
32 |
+ |
|
33 |
+ case data |
|
34 |
+ when ActiveSupport::HashWithIndifferentAccess |
|
35 |
+ self[:#{column_name}] = data |
|
36 |
+ when Hash |
|
37 |
+ self[:#{column_name}] = ActiveSupport::HashWithIndifferentAccess.new(data) |
|
38 |
+ else |
|
39 |
+ self[:#{column_name}] = data |
|
40 |
+ end |
|
41 |
+ end |
|
42 |
+ RUBY |
|
43 |
+ end |
|
44 |
+ end |
|
45 |
+ end |
|
46 |
+end |
@@ -1,43 +0,0 @@ |
||
1 |
-module SerializeAndSymbolize |
|
2 |
- extend ActiveSupport::Concern |
|
3 |
- |
|
4 |
- module ClassMethods |
|
5 |
- def serialize_and_symbolize(*column_names) |
|
6 |
- column_names.flatten.uniq.compact.map(&:to_sym).each do |column_name| |
|
7 |
- setup_name = "setup_#{column_name}".to_sym |
|
8 |
- symbolize_name = "symbolize_#{column_name}".to_sym |
|
9 |
- validate_name = "validate_#{column_name}".to_sym |
|
10 |
- |
|
11 |
- serialize column_name |
|
12 |
- after_initialize setup_name |
|
13 |
- before_validation symbolize_name |
|
14 |
- before_save symbolize_name |
|
15 |
- validate validate_name |
|
16 |
- |
|
17 |
- class_eval <<-RUBY |
|
18 |
- def #{setup_name} |
|
19 |
- self[:#{column_name}] ||= {} |
|
20 |
- end |
|
21 |
- |
|
22 |
- def #{validate_name} |
|
23 |
- # Implement me in your subclass. |
|
24 |
- end |
|
25 |
- |
|
26 |
- def #{symbolize_name} |
|
27 |
- self.#{column_name} = self[:#{column_name}] |
|
28 |
- end |
|
29 |
- |
|
30 |
- def #{column_name}=(data) |
|
31 |
- if data.is_a?(String) |
|
32 |
- self[:#{column_name}] = JSON.parse(data).recursively_symbolize_keys rescue {} |
|
33 |
- elsif data.is_a?(Hash) |
|
34 |
- self[:#{column_name}] = data.recursively_symbolize_keys |
|
35 |
- else |
|
36 |
- self[:#{column_name}] = data |
|
37 |
- end |
|
38 |
- end |
|
39 |
- RUBY |
|
40 |
- end |
|
41 |
- end |
|
42 |
- end |
|
43 |
-end |
@@ -21,17 +21,6 @@ module Utils |
||
21 | 21 |
end |
22 | 22 |
end |
23 | 23 |
|
24 |
- def self.recursively_symbolize_keys(object) |
|
25 |
- case object |
|
26 |
- when Hash |
|
27 |
- object.inject({}) {|memo, (k, v)| memo[String === k ? k.to_sym : k] = recursively_symbolize_keys(v); memo } |
|
28 |
- when Array |
|
29 |
- object.map { |item| recursively_symbolize_keys item } |
|
30 |
- else |
|
31 |
- object |
|
32 |
- end |
|
33 |
- end |
|
34 |
- |
|
35 | 24 |
def self.interpolate_jsonpaths(value, data) |
36 | 25 |
value.gsub(/<[^>]+>/).each { |jsonpath| |
37 | 26 |
Utils.values_at(data, jsonpath[1..-2]).first.to_s |
@@ -23,7 +23,7 @@ describe AgentsController do |
||
23 | 23 |
sign_in users(:bob) |
24 | 24 |
post :handle_details_post, :id => agents(:bob_manual_event_agent).to_param, :payload => { :foo => "bar" } |
25 | 25 |
JSON.parse(response.body).should == { "success" => true } |
26 |
- agents(:bob_manual_event_agent).events.last.payload.should == { :foo => "bar" } |
|
26 |
+ agents(:bob_manual_event_agent).events.last.payload.should == { 'foo' => "bar" } |
|
27 | 27 |
end |
28 | 28 |
|
29 | 29 |
it "can only be accessed by the Agent's owner" do |
@@ -8,7 +8,7 @@ describe UserLocationUpdatesController do |
||
8 | 8 |
|
9 | 9 |
it "should create events without requiring login" do |
10 | 10 |
post :create, :user_id => users(:bob).to_param, :secret => "my_secret", :longitude => 123, :latitude => 45, :something => "else" |
11 |
- @agent.events.last.payload.should == { :longitude => "123", :latitude => "45", :something => "else" } |
|
11 |
+ @agent.events.last.payload.should == { 'longitude' => "123", 'latitude' => "45", 'something' => "else" } |
|
12 | 12 |
@agent.events.last.lat.should == 45 |
13 | 13 |
@agent.events.last.lng.should == 123 |
14 | 14 |
end |
@@ -18,7 +18,7 @@ describe UserLocationUpdatesController do |
||
18 | 18 |
@jane_agent.save! |
19 | 19 |
|
20 | 20 |
post :create, :user_id => users(:bob).to_param, :secret => "my_secret", :longitude => 123, :latitude => 45, :something => "else" |
21 |
- @agent.events.last.payload.should == { :longitude => "123", :latitude => "45", :something => "else" } |
|
21 |
+ @agent.events.last.payload.should == { 'longitude' => "123", 'latitude' => "45", 'something' => "else" } |
|
22 | 22 |
@jane_agent.events.should be_empty |
23 | 23 |
end |
24 | 24 |
|
@@ -33,7 +33,7 @@ describe UserLocationUpdatesController do |
||
33 | 33 |
|
34 | 34 |
lambda { |
35 | 35 |
post :create, :user_id => users(:bob).to_param, :secret => "my_secret2", :longitude => 123, :latitude => 45, :something => "else" |
36 |
- @agent2.events.last.payload.should == { :longitude => "123", :latitude => "45", :something => "else" } |
|
36 |
+ @agent2.events.last.payload.should == { 'longitude' => "123", 'latitude' => "45", 'something' => "else" } |
|
37 | 37 |
}.should_not change { @agent.events.count } |
38 | 38 |
end |
39 | 39 |
end |
@@ -32,12 +32,12 @@ describe WebhooksController do |
||
32 | 32 |
|
33 | 33 |
it "should call receive_webhook" do |
34 | 34 |
post :create, :user_id => users(:bob).to_param, :agent_id => @agent.id, :secret => "my_secret", :key => "value", :another_key => "5" |
35 |
- @agent.reload.memory[:webhook_values].should == { :key => "value", :another_key => "5" } |
|
35 |
+ @agent.reload.memory[:webhook_values].should == { 'key' => "value", 'another_key' => "5" } |
|
36 | 36 |
response.body.should == "success" |
37 | 37 |
response.should be_success |
38 | 38 |
|
39 | 39 |
post :create, :user_id => users(:bob).to_param, :agent_id => @agent.id, :secret => "not_my_secret", :no => "go" |
40 |
- @agent.reload.memory[:webhook_values].should_not == { :no => "go" } |
|
40 |
+ @agent.reload.memory[:webhook_values].should_not == { 'no' => "go" } |
|
41 | 41 |
response.body.should == "failure" |
42 | 42 |
response.should be_missing |
43 | 43 |
end |
@@ -288,7 +288,7 @@ describe Agents::HumanTaskAgent do |
||
288 | 288 |
@checker.send :review_hits |
289 | 289 |
|
290 | 290 |
assignments.all? {|a| a.approved == true }.should be_false |
291 |
- @checker.memory[:hits].should == { :"JH3132836336DHG" => @event.id } |
|
291 |
+ @checker.memory[:hits].should == { "JH3132836336DHG" => @event.id } |
|
292 | 292 |
end |
293 | 293 |
|
294 | 294 |
it "shouldn't do anything if an assignment is missing" do |
@@ -306,7 +306,7 @@ describe Agents::HumanTaskAgent do |
||
306 | 306 |
@checker.send :review_hits |
307 | 307 |
|
308 | 308 |
assignments.all? {|a| a.approved == true }.should be_false |
309 |
- @checker.memory[:hits].should == { :"JH3132836336DHG" => @event.id } |
|
309 |
+ @checker.memory[:hits].should == { "JH3132836336DHG" => @event.id } |
|
310 | 310 |
end |
311 | 311 |
|
312 | 312 |
it "should create events when all assignments are ready" do |
@@ -328,8 +328,8 @@ describe Agents::HumanTaskAgent do |
||
328 | 328 |
hit.should be_disposed |
329 | 329 |
|
330 | 330 |
@checker.events.last.payload[:answers].should == [ |
331 |
- {:sentiment => "neutral", :feedback => ""}, |
|
332 |
- {:sentiment => "happy", :feedback => "Take 2"} |
|
331 |
+ {'sentiment' => "neutral", 'feedback' => ""}, |
|
332 |
+ {'sentiment' => "happy", 'feedback' => "Take 2"} |
|
333 | 333 |
] |
334 | 334 |
|
335 | 335 |
@checker.memory[:hits].should == {} |
@@ -338,7 +338,7 @@ describe Agents::HumanTaskAgent do |
||
338 | 338 |
describe "taking majority votes" do |
339 | 339 |
before do |
340 | 340 |
@checker.options[:take_majority] = "true" |
341 |
- @checker.memory[:hits] = { :"JH3132836336DHG" => @event.id } |
|
341 |
+ @checker.memory[:hits] = { "JH3132836336DHG" => @event.id } |
|
342 | 342 |
mock(RTurk::GetReviewableHITs).create { mock!.hit_ids { %w[JH3132836336DHG JH39AA63836DHG JH39AA63836DH12345] } } |
343 | 343 |
end |
344 | 344 |
|
@@ -372,14 +372,14 @@ describe Agents::HumanTaskAgent do |
||
372 | 372 |
assignments.all? {|a| a.approved == true }.should be_true |
373 | 373 |
|
374 | 374 |
@checker.events.last.payload[:answers].should == [ |
375 |
- { :sentiment => "sad", :age_range => "<50" }, |
|
376 |
- { :sentiment => "neutral", :age_range => ">50" }, |
|
377 |
- { :sentiment => "happy", :age_range => ">50" }, |
|
378 |
- { :sentiment => "happy", :age_range => ">50" } |
|
375 |
+ { 'sentiment' => "sad", 'age_range' => "<50" }, |
|
376 |
+ { 'sentiment' => "neutral", 'age_range' => ">50" }, |
|
377 |
+ { 'sentiment' => "happy", 'age_range' => ">50" }, |
|
378 |
+ { 'sentiment' => "happy", 'age_range' => ">50" } |
|
379 | 379 |
] |
380 | 380 |
|
381 |
- @checker.events.last.payload[:counts].should == { :sentiment => { :happy => 2, :sad => 1, :neutral => 1 }, :age_range => { :">50" => 3, :"<50" => 1 } } |
|
382 |
- @checker.events.last.payload[:majority_answer].should == { :sentiment => "happy", :age_range => ">50" } |
|
381 |
+ @checker.events.last.payload[:counts].should == { 'sentiment' => { 'happy' => 2, 'sad' => 1, 'neutral' => 1 }, 'age_range' => { ">50" => 3, "<50" => 1 } } |
|
382 |
+ @checker.events.last.payload[:majority_answer].should == { 'sentiment' => "happy", 'age_range' => ">50" } |
|
383 | 383 |
@checker.events.last.payload.should_not have_key(:average_answer) |
384 | 384 |
|
385 | 385 |
@checker.memory[:hits].should == {} |
@@ -421,16 +421,16 @@ describe Agents::HumanTaskAgent do |
||
421 | 421 |
assignments.all? {|a| a.approved == true }.should be_true |
422 | 422 |
|
423 | 423 |
@checker.events.last.payload[:answers].should == [ |
424 |
- { :rating => "1" }, |
|
425 |
- { :rating => "3" }, |
|
426 |
- { :rating => "5.1" }, |
|
427 |
- { :rating => "2" }, |
|
428 |
- { :rating => "2" } |
|
424 |
+ { 'rating' => "1" }, |
|
425 |
+ { 'rating' => "3" }, |
|
426 |
+ { 'rating' => "5.1" }, |
|
427 |
+ { 'rating' => "2" }, |
|
428 |
+ { 'rating' => "2" } |
|
429 | 429 |
] |
430 | 430 |
|
431 |
- @checker.events.last.payload[:counts].should == { :rating => { :"1" => 1, :"2" => 2, :"3" => 1, :"4" => 0, :"5.1" => 1 } } |
|
432 |
- @checker.events.last.payload[:majority_answer].should == { :rating => "2" } |
|
433 |
- @checker.events.last.payload[:average_answer].should == { :rating => (1 + 2 + 2 + 3 + 5.1) / 5.0 } |
|
431 |
+ @checker.events.last.payload[:counts].should == { 'rating' => { "1" => 1, "2" => 2, "3" => 1, "4" => 0, "5.1" => 1 } } |
|
432 |
+ @checker.events.last.payload[:majority_answer].should == { 'rating' => "2" } |
|
433 |
+ @checker.events.last.payload[:average_answer].should == { 'rating' => (1 + 2 + 2 + 3 + 5.1) / 5.0 } |
|
434 | 434 |
|
435 | 435 |
@checker.memory[:hits].should == {} |
436 | 436 |
end |
@@ -53,7 +53,7 @@ describe Agents::SentimentAgent do |
||
53 | 53 |
it "checks if content key is working fine" do |
54 | 54 |
@checker.receive([@event]) |
55 | 55 |
Event.last.payload[:content].should == "value1" |
56 |
- Event.last.payload[:original_event].should == {:message => "value1"} |
|
56 |
+ Event.last.payload[:original_event].should == { 'message' => "value1" } |
|
57 | 57 |
end |
58 | 58 |
it "should handle multiple events" do |
59 | 59 |
event1 = Event.new |
@@ -53,7 +53,7 @@ describe Agents::TwitterStreamAgent do |
||
53 | 53 |
@agent.memory[:filter_counts] = {:keyword1 => 2, :keyword2 => 3, :keyword3 => 4} |
54 | 54 |
@agent.save! |
55 | 55 |
@agent.process_tweet('keyword1', {:text => "something", :user => {:name => "Mr. Someone"}}) |
56 |
- @agent.reload.memory[:filter_counts].should == {:keyword1 => 3, :keyword2 => 3} |
|
56 |
+ @agent.reload.memory[:filter_counts].should == { 'keyword1' => 3, 'keyword2' => 3 } |
|
57 | 57 |
end |
58 | 58 |
end |
59 | 59 |
|
@@ -64,9 +64,9 @@ describe Agents::TwitterStreamAgent do |
||
64 | 64 |
}.should change { @agent.events.count }.by(1) |
65 | 65 |
|
66 | 66 |
@agent.events.last.payload.should == { |
67 |
- :filter => 'keyword1', |
|
68 |
- :text => "something", |
|
69 |
- :user => {:name => "Mr. Someone"} |
|
67 |
+ 'filter' => 'keyword1', |
|
68 |
+ 'text' => "something", |
|
69 |
+ 'user' => { 'name' => "Mr. Someone" } |
|
70 | 70 |
} |
71 | 71 |
end |
72 | 72 |
|
@@ -79,9 +79,9 @@ describe Agents::TwitterStreamAgent do |
||
79 | 79 |
}.should change { @agent.events.count }.by(1) |
80 | 80 |
|
81 | 81 |
@agent.events.last.payload.should == { |
82 |
- :filter => 'keyword1-1', |
|
83 |
- :text => "something", |
|
84 |
- :user => {:name => "Mr. Someone"} |
|
82 |
+ 'filter' => 'keyword1-1', |
|
83 |
+ 'text' => "something", |
|
84 |
+ 'user' => { 'name' => "Mr. Someone" } |
|
85 | 85 |
} |
86 | 86 |
end |
87 | 87 |
end |